#include<stdio.h>

int main()
{
    
    
    // //指针:特殊的数据类型    数据类型 *


    
    // //指针内部存放的是内存的地址
    // // & 取地址符号
    
    int a = 10;
    
    // int* p = &a;  // p里面存在a的地址
    
    // // printf(  "%d\n",*p);
    
    // printf("%ld\n",sizeof(p));  //指针占8个字节   
    
    // // %p 以地址形式输出一个整数值 
    
    // printf("%p\n",p);

    // // %0x 以十六进制形式输出一个整数值
    
    // printf("%0x\n",p);//地址本质上就是个整数值，代表内存的编号
    
    // // 无符号长整形数据
    

    // //*p = 20  给p的地址导向的  内存  赋值为20
    
    // p = 20;// 给p这个 地址 改成 20     // 野指针：指向非法内存
    // printf("%d\n",*p);  // 段错误：内存错误，访问了非法内存
    //                     // 非法内存：不存在的内存或者已经被释放的内存

    
    //指针的定义时一定要进行初始化    NULL：空指针
    //int *p2 = NULL;
    int* p = &a;

    // *p = 20;
    // printf("%d\n",a);

    int** p2 = &p;//二级指针：存储了指针变量的地址的指针变量
    **p2 = 1;
    // p2: p的地址
    // *p2: p的值（a的地址）
    // **p2：      a的值
    printf("%d\n",a);
    return 0;

}